/**
 * 数据转换
 */
class Transpose {
  /**
   * 行列转换
   * @param matrix 二维矩阵
   * @return 行列转换后的二维矩阵
   */
  transposeMatrix(matrix: any[][]): any[][] {
    // 获取原矩阵的行数和列数
    const rows = matrix.length;
    const cols = matrix[0].length;

    // 初始化转置矩阵
    const transposed = new Array(cols).fill(0).map(() => new Array(rows).fill(0));

    // 转置操作
    for (let i = 0; i < rows; i++) {
      for (let j = 0; j < cols; j++) {
        transposed[j][i] = matrix[i][j];
      }
    }

    return transposed;
  }

  /**
   * 中国 省份 直辖市 特别行政区 名称转换
   * @param regionName 转换前地区名称只有完整地区名称前两个字
   * @return 完整地区名称
   */
  formatRegionName(regionName: string): string {
    let map = new Map();
    map.set("北京", "北京市");
    map.set("天津", "天津市");
    map.set("河北", "河北省");
    map.set("山西", "山西省");
    map.set("内蒙古", "内蒙古自治区");
    map.set("辽宁", "辽宁省");
    map.set("吉林", "吉林省");
    map.set("黑龙江", "黑龙江省");
    map.set("上海", "上海市");
    map.set("江苏", "江苏省");
    map.set("浙江", "浙江省");
    map.set("安徽", "安徽省");
    map.set("福建", "福建省");
    map.set("江西", "江西省");
    map.set("山东", "山东省");
    map.set("河南", "河南省");
    map.set("湖北", "湖北省");
    map.set("湖南", "湖南省");
    map.set("广东", "广东省");
    map.set("广西", "广西壮族自治区");
    map.set("海南", "海南省");
    map.set("重庆", "重庆市");
    map.set("四川", "四川省");
    map.set("贵州", "贵州省");
    map.set("云南", "云南省");
    map.set("西藏", "西藏自治区");
    map.set("陕西", "陕西省");
    map.set("甘肃", "甘肃省");
    map.set("青海", "青海省");
    map.set("青海", "青海省");
    map.set("宁夏", "宁夏回族自治区");
    map.set("新疆", "新疆维吾尔自治区");
    map.set("台湾", "台湾省");
    map.set("香港", "香港特别行政区");
    map.set("澳门", "澳门特别行政区");
    return map.get(regionName) || regionName;
  }
}

/**
 * 身份证信息
 */
class idCard {
  /**
   * 获取出生日期
   * @param idCard 身份证
   * @return 出生日期 yyyy-MM-dd 格式
   */
  getBirthday(idCard: string): string {
    // return idCard.substring(6, 10) + '-' + idCard.substring(10, 12) + '-' + idCard.substring(12, 14);
    let array = [];
    array.push(idCard.substring(6, 10));
    array.push(idCard.substring(10, 12));
    array.push(idCard.substring(12, 14));
    return array.join('-');
  }

  /**
   * 获取年龄
   * @param idCard 身份证
   * @return 年龄
   */
  getAge(idCard: string) {
    let date = new Date();
    let age = date.getFullYear() - parseInt(idCard.substring(6, 10)) - 1;
    let month = date.getMonth() + 1;
    if (parseInt(idCard.substring(10, 12)) < month || parseInt(idCard.substring(10, 12)) == month && parseInt(idCard.substring(10, 12)) <= date.getDate()) {
      age++;
    }
    return age;
  }

  /**
   * 获取性别
   * @param  idCard 身份证
   * @returns 1代表男性 0代表女性
   */
  getGender(idCard: string): number {
    return parseInt(idCard.substring(16, 17)) % 2 === 1 ? 1 : 0;
  }
}

export default {
  transpose: new Transpose(),
  idCardUtil: new idCard(),
};